package com.example.callcenter.controller;

import com.example.callcenter.dto.CallTaskDTO;
import com.example.callcenter.dto.TaskMessageDTO;
import com.example.callcenter.entity.CallTask;
import com.example.callcenter.service.ICallTaskService;
import com.example.callcenter.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/task")
public class TaskController {

    @Autowired
    private ICallTaskService callTaskService;

    /**
     * 创建外呼任务
     * @param taskDTO 任务信息（JSON格式）
     * @return 统一返回结果
     */
    @PostMapping("/create")
    public ResultUtil createTask(@RequestBody CallTaskDTO taskDTO) {
        return callTaskService.createTask(taskDTO);
    }

    /**
     * 启动任务
     * @param taskId 任务ID（路径参数）
     * @return 统一返回结果
     */
    @PostMapping("/start/{taskId}")
    public ResultUtil startTask(@PathVariable Long taskId) {
        return callTaskService.startTask(taskId);
    }

    /**
     * 暂停任务
     * @param taskId 任务ID（路径参数）
     * @return 统一返回结果
     */
    @PostMapping("/pause/{taskId}")
    public ResultUtil pauseTask(@PathVariable Long taskId) {
        return callTaskService.pauseTask(taskId);
    }

    /**
     * 分页查询任务列表
     * @param pageNum 页码（默认1）
     * @param pageSize 每页条数（默认10）
     * @param keyword 搜索关键字（可选）
     * @return 分页任务列表
     */
    @GetMapping("/list")
    public ResultUtil getTaskList(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) String keyword) {
        return ResultUtil.success(callTaskService.getTaskPage(pageNum, pageSize, keyword));
    }

    /**
     * 模拟外呼结果回调（用于测试）
     * 实际场景中，由消息队列或坐席系统调用
     * @param resultDTO 外呼结果DTO
     * @return 统一返回结果
     */
    @PostMapping("/result")
    public ResultUtil handleCallResult(@RequestBody TaskMessageDTO resultDTO) {
        callTaskService.processCallResult(resultDTO);
        return ResultUtil.success("外呼结果已处理，将触发下一通电话延迟调度");
    }
}